草庐IT

c - WaitForMultipleObjects 堆栈

全部标签

C++ STL 堆栈问题 : Why does pop() not throw an exception if the stack is empty?

如果堆栈为空且没有可弹出的内容,为什么std::stack::pop()不抛出异常?(我正在为我自己的代码设计一个专门的堆栈,并且想知道这种方法(需要手动检查堆栈是否为空)与抛出异常之间的权衡。我的猜测是,尽管C++支持异常处理,但它的运行时开销很小,因此,为了获得最佳性能,决定不在std::stack::pop中抛出异常)。 最佳答案 我认为pop()不必抛出异常的原因与效率或性能无关,而是与异常有关。正如所争论的elsewhere:SGIexplanation:http://www.sgi.com/tech/stl/stack.

C++ STL 堆栈问题 : Why does pop() not throw an exception if the stack is empty?

如果堆栈为空且没有可弹出的内容,为什么std::stack::pop()不抛出异常?(我正在为我自己的代码设计一个专门的堆栈,并且想知道这种方法(需要手动检查堆栈是否为空)与抛出异常之间的权衡。我的猜测是,尽管C++支持异常处理,但它的运行时开销很小,因此,为了获得最佳性能,决定不在std::stack::pop中抛出异常)。 最佳答案 我认为pop()不必抛出异常的原因与效率或性能无关,而是与异常有关。正如所争论的elsewhere:SGIexplanation:http://www.sgi.com/tech/stl/stack.

c++ - 是否可以 std::move 本地堆栈变量?

请考虑以下代码:structMyStruct{intiInteger;stringstrString;};voidMyFunc(vector&vecStructs){MyStructNewStruct={8,"Hello"};vecStructs.push_back(std::move(NewStruct));}intmain(){vectorvecStructs;MyFunc(vecStructs);}为什么会这样?在调用MyFunc的那一刻,返回地址应该放在当前线程的栈上。现在创建NewStruct对象被创建,它也应该放在堆栈上。通过std::move,我告诉编译器,我不打算再使用

c++ - 是否可以 std::move 本地堆栈变量?

请考虑以下代码:structMyStruct{intiInteger;stringstrString;};voidMyFunc(vector&vecStructs){MyStructNewStruct={8,"Hello"};vecStructs.push_back(std::move(NewStruct));}intmain(){vectorvecStructs;MyFunc(vecStructs);}为什么会这样?在调用MyFunc的那一刻,返回地址应该放在当前线程的栈上。现在创建NewStruct对象被创建,它也应该放在堆栈上。通过std::move,我告诉编译器,我不打算再使用

c++ - 如何在 C++ 中处理或避免堆栈溢出

在C++中,堆栈溢出通常会导致程序不可恢复的崩溃。对于需要真正健壮的程序,这是一种NotAcceptable行为,特别是因为堆栈大小是有限的。关于如何处理问题的几个问题。有没有办法通过通用技术来防止堆栈溢出。(一种可扩展、强大的解决方案,包括处理消耗大量堆栈的外部库等)如果发生堆栈溢出,有没有办法处理它们?最好,堆栈会展开,直到有处理程序来处理这种问题。有些语言的线程具有可扩展的堆栈。类似的东西在C++中可能吗?如果对C++行为的解决方案有任何其他有用的意见,我们将不胜感激。 最佳答案 处理堆栈溢出不是正确的解决方案,相反,您必须确

c++ - 如何在 C++ 中处理或避免堆栈溢出

在C++中,堆栈溢出通常会导致程序不可恢复的崩溃。对于需要真正健壮的程序,这是一种NotAcceptable行为,特别是因为堆栈大小是有限的。关于如何处理问题的几个问题。有没有办法通过通用技术来防止堆栈溢出。(一种可扩展、强大的解决方案,包括处理消耗大量堆栈的外部库等)如果发生堆栈溢出,有没有办法处理它们?最好,堆栈会展开,直到有处理程序来处理这种问题。有些语言的线程具有可扩展的堆栈。类似的东西在C++中可能吗?如果对C++行为的解决方案有任何其他有用的意见,我们将不胜感激。 最佳答案 处理堆栈溢出不是正确的解决方案,相反,您必须确

c++ - 堆栈上分配的异常如何超出其范围?

在下面的代码中,基于堆栈的变量'ex'被抛出并捕获在一个超出ex声明范围的函数中。这对我来说似乎有点奇怪,因为(AFAIK)基于堆栈的变量不能在声明它们的范围之外使用(堆栈已展开)。voidf(){SomeKindOfExceptionex(...);throwex;}voidg(){try{f();}catch(SomeKindOfException&ex){//Handlingcode...}}我在SomeKindOfException的析构函数中添加了一个print语句,它表明ex一旦超出f()的范围就会被破坏,但是它会在g()中被捕获并在超出范围时再次被破坏.有什么帮助吗?

c++ - 堆栈上分配的异常如何超出其范围?

在下面的代码中,基于堆栈的变量'ex'被抛出并捕获在一个超出ex声明范围的函数中。这对我来说似乎有点奇怪,因为(AFAIK)基于堆栈的变量不能在声明它们的范围之外使用(堆栈已展开)。voidf(){SomeKindOfExceptionex(...);throwex;}voidg(){try{f();}catch(SomeKindOfException&ex){//Handlingcode...}}我在SomeKindOfException的析构函数中添加了一个print语句,它表明ex一旦超出f()的范围就会被破坏,但是它会在g()中被捕获并在超出范围时再次被破坏.有什么帮助吗?

c++ - 小对象堆栈存储、严格别名规则和未定义行为

我正在编写一个类似于std::function的类型删除函数包装器。(是的,我见过类似的实现,甚至是p0288r0提案,但我的用例非常狭窄而且有些专业。)。下面高度简化的代码说明了我当前的实现:classFunc{alignas(sizeof(void*))charc[64];//aligntowordboundarystructbase{virtualvoidoperator()()=0;virtual~base(){}};templatestructderived:publicbase{derived(T&&t):callable(std::move(t)){}voidoperat

c++ - 小对象堆栈存储、严格别名规则和未定义行为

我正在编写一个类似于std::function的类型删除函数包装器。(是的,我见过类似的实现,甚至是p0288r0提案,但我的用例非常狭窄而且有些专业。)。下面高度简化的代码说明了我当前的实现:classFunc{alignas(sizeof(void*))charc[64];//aligntowordboundarystructbase{virtualvoidoperator()()=0;virtual~base(){}};templatestructderived:publicbase{derived(T&&t):callable(std::move(t)){}voidoperat